---------------------------------------------------------------------
-                         Version History                           -
---------------------------------------------------------------------

Version 2.1, 2025/12/1:
(fernap:)
- Added a -d command line option to set the working directory (thanks to RPGHacker for the suggestion and feedback)
- Resources added to level/gamemode/overworld * can now be skipped on specific levels by prefiing them with a "-" in the list file.  (Thanks to Segment1Zone2 for prompting me to take another look at this).
- Teleport routine added

Version 2.1 (beta 2):
(fernap:)
- Extra bytes can now be given in 2- and 3-byte chunks (with endianness handled) by enclosing in ()s and []s, respectively
- No longer generates assembly errors when parent folders (now resources too) contain a "!" character (reported by ninj)
- Added support for a variable number of extra bytes with the ";>bytes any" command
- Migrate to .NET 8
- Fixed an old crash from any asar messages that contained a bogus C# format string (originally reported by Anas)

Version 2.1 (beta 1):
(fernap:)
- Added some command line options: disable "press any key to continue"; early setting of quiet mode; print version number ... see readme for details
- Level NMI code now runs in game modes 05-07 also so as to be active on the title screen, with an option to disable new behavior (suggested by MarioFanGamer)
- Fixed a crash when patching causes asar to expand the ROM (reported by Anas)
- Now creates any necessary work folders that don't already exist at program startup (suggested by Underrout)
- Added a 'deprecations' command to the list file to either show or hide asar's deprecation warnings (hide by default)
- Added fullsa1rom support
- Now throws an error when resource files contain no valid labels (suggested by RPGHacker)
- Updated to asar 1.91

Version 2.0:
(fernap:)
- Misc shared routine updates and fixes
- Fixed an error writing to the .extmod file (reported by Underrout)
- Fixed a crash for gamemode NMI resources
- Fixed a hang when updating from 1.x to 2.0 on SA-1 roms (reported by Makhnoslides)
- Fixed an assembly error when using resources with overworld NMI, but not level NMI (reported by Donut)

Version 2.0 (beta):

(fernap:)
- Removed spriteASM feature; it had been broken for a long time, and appears that no one was using it (resolves issue #27)
    - As such, the "sprite:" and "sprite-sa1:" declarations in the list.txt files have been deprecated (using these will result in an error).  Instead, there is now a required "freeram:" command, which specifies 2 bytes of freeram, rather than the 38 or 68 previously.
- Added support for multiple files per level/gamemode/overworld (implments issue #5, moots issue #22)
- Added support for a special "*" level/gamemode/overworld number; files added under this number will always run, as if they had been added under every level/gamemode/overworld individually (partially resolves issue #26)
- Added an "end:" label for level/gamemode/overworld code that will be run at the end of a frame (resolves the rest of issue #26)
    - This is implemented for levels with a new hijack at $00A2EE (this conflicts with with https://www.smwcentral.net/?p=section&a=details&id=12574, SMA2 Slide Kill Chain by HammerBrother, see the incompatibilities.txt for more info)
    - The modification to overworld code causes a conflict with https://www.smwcentral.net/?p=section&a=details&id=19763, lx5's nsmb star coin patch, see incompatibilities.txt for more info.
- Removed "main:", "load:", and "nmi:" labels from the global code file ("init:" still remains)
    - This rendered the hijack at $00806F useless, which has now been removed...applying UAT will restore the original game code here
    - See the readme for equivalent functionality using the new features
- Added support for resources to have extra bytes (implements issue #10)
- Resource files can now include the exact line ";>dbr off" to tell UAT not to set the DBR when calling labels in that resource.  Otherwise, it will set the DBR when calling any resource labels, except for nmi: .  This was the default behavior of previous versions.
- Added "quiet" and "debug" verbose levels
- Added a %require_uber_ver() macro to the macro library file that lets a resource fail if the running version of UAT is lower than specified
- Updated Asar to 1.81
- Added support for shared routines similar to (but a little different from) Pixi and GPS
- Added support for the ">sa1" command, which has UAT automatically invoke the SA-1 CPU when calling labels on SA-1 ROMs
- UAT now sets !sprite_load_table based on bit 0 of $0F:FFE0 in the ROM
- Moved stock defines to asm/base/uber_defines.asm, leaving the macro library file free for any user stuff
- If a library file has a label with the same name as the file, UAT no longer exports that label without the filename prefix.  E.g., a library file math.asm with the label math: would previously have had that label exposed simply as "math:", rather than "math_math:" as suggested by the documentation.  This was undocumented behavior and no longer happens.
- Verbose info for library files no longer includes the PC address of the insertion location, just the SNES address
- Fixed issue #28 (crash when switching to a custom gamemode)
- Fixed issue #23 (macrolib file not available for global code)
- Fixed issue #29 (same filename in different folder type wouldn't work...foo.asm in level/ and overworld/ eg)
- UAT no longer includes the same file twice when specified with different capitalization in list.txt
- Fixed issue #25 (UAT will now return 1 on error and 0 on success)
- Added a hijack of the 12 bytes of unused space at $01CD1E; this now consists of 4 bytes of "UBER", then one byte for the major version number of UAT that was used, and one byte for the minor version number (currently 2.0); the last 6 bytes are set to 0, but reserved for future use
- UAT will refuse to run on a ROM that had a later version of UAT applied (see readme for how to override this)
- Added a missing "nop" to the hijack at $00A5EE
- Rewrote the list.txt parser using Pidgin (https://github.com/benjamin-hodgson/Pidgin) to accommodate the new stuff
- Removed the path list passed to Asar when patching files.  Any incsrc/incbin should be relative to the calling file's location (absolute paths may also be given).  With this in mind, issue #20 should be closed
- Issue #19 probably isn't an issue anymore...probably stemmed from copying contents of asm files and then replacing filename in the error messages manually
- Lots of other behind-the-scenes updates and rewrites


Version 1.5:
 - Fixed an in-game crash when using different NMI code combinations
 - Refactored some core parts of the program, making it easier to
add improvements.
 - Improved the way how the LM restore point information works in a
way that UberASM Tool will no longer concat its program information
more than once.
 - Fixed incorrect extra byte 4 define used for PIXI sprites.
 - Added BW-RAM definition which is used on SA-1 ROMs only.
 - Fixed an application crash when accidentally including an empty
file.

Version 1.4:
- Updated Asar to 1.71.
- Fixed newer Asar printing weird path-related warnings.
- Fixed a crash when stdin is either redirected or set to empty.
- Fixed a crash when an .asm file prints either an empty or white-space
only string.
- Moved working .asm files to the dedicated ./asm/work instead of 
./asm/.

Version 1.3:
- (randomdude999) Now uses Asar 1.61.

Version 1.2:
- Added sprite defines with SA-1 support.
- Fixed a crash when using both Level NMI and Overworld NMI.
- Fixed some unintended behavior when enabling only Overworld NMI.
- (RPG Hacker) Now uses Asar 1.50.

Version 1.1:
 - Added global_load support.
 - Added more error checks for avoiding free space leaking when user
wrongly uses pullpc/pushpc.
 - Fixed program crashing when running on a Dropbox folder.
 - Fixed minor display/print changes when running program.
 - Fixed minor grammar errors.

Version 1.0:
 - First Public Release

